package com.zwj.interview.哈希表;

import java.util.HashMap;
import java.util.Map;

/**
 * @Author: Zwj
 * @Date: 2022/2/28 17:38
 *
 * 输入一个数组和一个值k，请问如何在数组中找出两个和为k的数字并返回它们的下标？
 * 假设数组中存在且只存在一对符合条件的数字，同时一个数字不能使用两次。
 * 例如，输入数组[1，2，4，6，10]，k的值为8，数组中的数字2与6的和为8，它们的下标分别为1与3
 */
public class 两数和2 {
    public int[] twoSum(int[] nums, int target) {
        int n=nums.length;
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<n;i++){
            map.put(nums[i],i);
        }
        for(int i=0;i<n;i++){
            int other=target-nums[i];
            //包含这个数字并且不是原来的那个
            if(map.containsKey(other)&& map.get(other)!=i){
                return new int[]{i,map.get(other)};
            }
        }
        return new int[]{-1,-1};
    }


}